#ifndef __LCD_H
#define __LCD_H
#include "stdint.h"
/*********************************************屏幕显示函数开始********************************************/
/**
 * @brief 在指定区域填充颜色
 *
 * @param xsta 起始坐标 x
 * @param ysta 起始坐标y
 * @param xend 结束坐标x
 * @param yend 结束坐标y
 * @param color 颜色
 */
void LCD_Fill(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint32_t color);

/**
 * @brief 在指定位置画点
 *
 * @param x x坐标
 * @param y y坐标
 * @param color 颜色
 */
void LCD_DrawPoint(uint16_t x, uint16_t y, uint32_t color);

/**
 * @brief 在指定位置画一个线段
 *
 * @param x1 起始坐标x
 * @param y1 起始坐标y
 * @param x2 结束坐标x
 * @param y2 结束坐标y
 * @param color 颜色
 */
void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint32_t color);

/**
 * @brief 在指定位置画一个矩形
 *
 * @param x1 起始坐标x
 * @param y1 起始坐标y
 * @param x2 结束坐标x
 * @param y2 结束坐标y
 * @param color 颜色
 */
void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint32_t color);

/**
 * @brief 在指定位置画一个圆
 *
 * @param x0 圆心坐标x
 * @param y0 圆心坐标y
 * @param r 半径
 * @param color 颜色
 */
void Draw_Circle(uint16_t x0, uint16_t y0, uint8_t r, uint32_t color);

/**
 * @brief 指定位置显示一个字符
 *
 * @param x x坐标
 * @param y y坐标
 * @param num 要显示的char 字符
 * @param fc  字体颜色
 * @param bc  背景颜色
 * @param sizey 字体大小 16 24 32
 * @param mode 0叠加模式 / 1 不叠加
 */
void LCD_ShowChar(uint16_t x, uint16_t y, uint8_t num, uint32_t fc, uint32_t bc, uint8_t sizey, uint8_t mode);

/**
 * @brief 指定位置显示一个字符串
 *
 * @param x x坐标
 * @param y y坐标
 * @param p 要显示的字符串数组指针
 * @param fc  字体颜色
 * @param bc  背景颜色
 * @param sizey 字体大小 16 24 32
 * @param mode 0叠加模式 / 1 不叠加
 */
void LCD_ShowString(uint16_t x, uint16_t y, const uint8_t *p, uint32_t fc, uint32_t bc, uint8_t sizey, uint8_t mode);

/**
 * @brief 求幂函数
 *
 * @param m 底数
 * @param n 指数
 * @return uint32_t 结果
 */
uint32_t mypow(uint8_t m, uint8_t n);

/**
 * @brief 指定位置显示一个浮点数
 *
 * @param x x坐标
 * @param y y坐标
 * @param num 要显示的数字
 * @param len  长度
 * @param fc  字体颜色
 * @param bc 背景颜色
 * @param sizey 字体大小 16 24 32
 */
void LCD_ShowIntNum(uint16_t x, uint16_t y, uint16_t num, uint8_t len, uint32_t fc, uint32_t bc, uint8_t sizey);

/**
 * @brief 指定位置显示一个字符串
 *
 * @param x x坐标
 * @param y y坐标
 * @param num 要显示的数字
 * @param len  长度
 * @param fc  字体颜色
 * @param bc 背景颜色
 * @param sizey 字体大小 16 24 32
 */
void LCD_ShowFloatNum1(uint16_t x, uint16_t y, float num, uint8_t len, uint32_t fc, uint32_t bc, uint8_t sizey);

/**
 * @brief 显示一张图片在屏幕上
 *
 * @param x x坐标
 * @param y y坐标
 * @param length 长
 * @param width 宽
 * @param pic 图片数组
 */
void LCD_ShowPicture(uint16_t x, uint16_t y, uint16_t length, uint16_t width, const uint8_t pic[]);

/*********************************************屏幕显示函数结束***********************************************/

/*---------------------------------------------------------------------------------------------------------*/
/*********************************************屏幕显示颜色定义开始********************************************/
#define WHITE 0xFCFCFC
#define BLACK 0X000000
#define RED 0xFC0000
#define GREEN 0x00FC00
#define BLUE 0x0000FC
/*********************************************屏幕显示颜色定义结束********************************************/
#endif
